<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        var obj = {
            name: '张三',
            age: 16,
            tel: 110
        }
        // Object.defineProperty(obj, 'name', {
        //     value: '李四',
        //     writable: true, // 定义属性值是否可修改的方法 false表示属性值不能修改 true表示可以修改
        //     enumerable: false, // 定义对象属性是否可枚举 false表示不可枚举 这时候不能使用for ... in等操作方法 操作对象属性 否则可以
        //     configurable: false // 定义对象属性是否可删除的方法 false表示不可删除
        // })
        var $data = Object.assign({}, obj)

        console.log($data);
        // Object.defineProperty(obj, 'name', {
        //     value: '李四',
        //     writable: true, // 定义属性值是否可修改的方法 false表示属性值不能修改 true表示可以修改
        //     enumerable: false, // 定义对象属性是否可枚举 false表示不可枚举 这时候不能使用for ... in等操作方法 操作对象属性 否则可以
        //     configurable: false // 定义对象属性是否可删除的方法 false表示不可删除
        // })

        // obj.name = '李四'
        // console.log(obj);

        // for(let key in obj) {
        //     console.log(key);
        // }

        // obj.name = '张三'
        // console.log(obj);
        // var data2 = {...data}
        // assign 枚举方法 第一个是要返回的对象 后面是要进行枚举的对象
        // 所谓枚举是将对象中的键值对一个个拿出来 放入新对象中
        // var $data = Object.assign({}, obj)

        // console.log($data);
        // Object.defineProperty(obj, 'name', {
            
        //     set(val) {
        //         // console.log(val);
        //         // console.log(this);
        //         // this.name = val
        //         // return val
        //         $data.name = val
        //     },

        //     get() {
        //         return $data.name
        //     }
        // })

        // obj.name = '李四'
        // // obj.name = 'aaa'
        // console.log(obj);
    </script>
</body>
</html>